<?php 
class Sedf_Filter_Ucwords implements Zend_Filter_Interface
{
    public function filter($value)
    {
        $value = mb_strtolower($value, 'UTF-8');
        $minusculas = array('da', 'de', 'do', 'das', 'des', 'dos', 'e');
        
        $value = explode(' ', $value);
        foreach ($value as $chave => $palavra) {
            if (((int)$chave == 0) or (!in_array($palavra, $minusculas))) {
                $inicial = mb_strtoupper(substr($palavra, 0, 1), 'UTF-8');
                
                //-- Correção de erros na acentuação das primeiras palavras...
                if (strlen($inicial) == 0) {
                    $inicial = mb_strtoupper(substr($palavra, 0, 2), 'UTF-8');
                }
                
                $valor[$chave] = trim($inicial . mb_strtolower(substr($palavra, 1), 'UTF-8'));
            } else {
                $valor[$chave] = $palavra;
            }
        }
        
        return implode(' ', $valor); 
    }
    
    static function filtrar($value)
    {
        $filtro = new Sedf_Filter_Ucwords();
        return $filtro->filter($value);
    }
    
}